// 数据库操作
const mongoose = require('mongoose');
// 模型规则类
const {
    Schema
} = mongoose;

// 对象规则验证
const Joi = require('joi');
// 文章模型规则
const roomTypeSchema = new Schema({
    // 房间名称
    title: {
        type: String,
        required: [true, '房间名称不能为空'],
        unique: [true, '房间已存在'],
        minlength: 2,
        maxlength: 16
    },
    // 支持的子房型
    children: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'RoomType'
    }],
    // 房型的英文名称-单数
    singularTitle_en: {
        type: String,
        default: ''
    },
    // 房型的英文名称-双数
    pluralTitle_en: {
        type: String,
        default: ''
    },
    // 房型的匹配项字符串列表
    matches: {
        type: Array,
        default: []
    },
    // 标识此房型是否为床位
    isBed: {
        type: Boolean,
        required: true,
        default: false
    }
}, {
    versionKey: false
});

const RoomType = mongoose.model('RoomType', roomTypeSchema);

// 房型格式校验
const validateRoomType = type => {
    // 定义对象验证规则
    const schema = {
        title: Joi.string().regex(/^[\u4e00-\u9fa5][\u4e00-\u9fa5\w\d_-]{1,15}$/).required().error(new Error('[标识名称-中文]项的格式错误，必须以中文开头，可包含汉字、字母、数字、下划线和分隔符，长度为2-16位')),
        isBed: Joi.boolean().required().error(new Error('房型是否为床位的标识项不能为空'))
    };
    // 验证
    return Joi.validate(type, schema, {
        // 检测到所有错误
        abortEarly: false,
        // 不允许对象包含被忽略的未知键
        allowUnknown: true
    });
}

// 导出模块成员
module.exports = {
    RoomType,
    validateRoomType
}